home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Languguage OS 2
/
Languguage OS II Version 10-94 (Knowledge Media)(1994).ISO
/
language
/
embedded
/
m68k
/
tutor.arc
/
BR.SA
< prev
next >
Wrap
Text File
|
1990-01-05
|
7KB
|
225 lines
BR IDNT 1,0 BR, GD, GT, TR, TT, PER Commands 12/04/81
XDEF GCMD
XDEF GOCMD
XDEF GOCMD1
XDEF GTCMD
XDEF GDCMD
XDEF BRCMD
XDEF NOBRCMD
XDEF TCMDHOT
XDEF TRCMD
XDEF TCMD
XDEF TTCMD
SPC 1
XREF.S BPADD
XREF.S BPCNT
XREF.S BPTILL
XREF CKADDR
XREF CKWADR
XREF FIXDATA
XREF FIXDCRLF
XREF FNEXTF
XREF FRELADDR
XREF GETA
XREF GETNUMA
XREF MACSBUG
XREF MSG008E
XREF OUT1CR
XREF PNT6HX
XREF PNTZHX
XREF PPHY
XREF.S REGPC
XREF SYNTAX
XREF.S TRACECNT
XREF.S TRACEON
XREF UNSTACK
XREF UNTRACE
EOT EQU 4
PAGE
SECTION 11
*
* ***T*** TRACE COMMAND
*
*
TCMD DS 0 "T" Alias for "TR" command
TRCMD LEA TCMDHOT(PC),A0 IF NO PARAMTERS
BSR FNEXTF FIND NEXT FIELD
BSR GETNUMA FIND NUMBER OF INST TO TRACE
BSR CKADDR INSURE 24 BITS OR LESS
TST.L D0
BNE.S TCMD15
SPC 1
TCMDHOT DS 0 SPECIAL ENTRY FROM DECODE
MOVE.L #1,D0 ZERO; MAKE TRACE ONE
TCMD15 MOVE.L D0,TRACECNT
BRA.S TRACE2
SPC 4
*
** TT ** "TRACE TILL" COMMAND
*
TTCMD LEA SYNTAX(PC),A0
BSR FNEXTF FIND NEXT FIELD
BSR GETA GET ADDRESS
BSR CKWADR CHECK WORD BOUNDRY ADDRESS
SPC 1
MOVE.L D0,D6
BSR PPHY DISPLAY TILL ADDRESS
SPC 1
MOVE.L D6,BPTILL 9TH BP
MOVE.L #$FFFF,TRACECNT SET FOR A VERY LONG TIME
SPC 1
TRACE2 MOVE.W #-1,TRACEON FOR DECODE OF NEXT COMMAND
SPC 1
MOVE.L REGPC,D0
BSR PPHY DISPLAY START (PC) ADDRESS
BRA UNTRACE
PAGE
*
* ***GT*** RUN PROGRAM TO TEMP BREAKPOINT
*
GTCMD LEA SYNTAX(PC),A0 GET NUMBER ELSE PRINT "WHAT"
BSR FNEXTF FIND NEXT FIELD
BSR GETA GET ADDRESS
BSR CKWADR CHECK WORD BOUNDRY ADDRESS
MOVE.L D0,D6 D6 = UNTIL ADDRESS
BSR PPHY PRINT PHYSICAL ADDRESS
SPC 1
* IF TILL ADDRESS IN BREAKPOINT TABLE; DISPLAY WHAT
LEA BPADD,A0 A0 = POINTER TO BP ADDRESSES
MOVE.L #8,D7 D7 = # OF ADDRESS ALLOWED
GT21 CMP.L (A0)+,D6
BEQ BCMD55 ALREADY IN TABLE -SHOW TABLE-
SUB.L #1,D7
BNE GT21
SPC 1
MOVE.L D6,BPTILL 9TH BREAKPOINT
BSR.S GOCMD1A NORMAL STARTUP
BRA.S GOCMD1
SPC 1
GOSET1 LEA GOCMD1A(PC),A0 WHERE TO GO IF NO PARAMERS
BSR FNEXTF FIND NEXT FIELD
BSR GETA GET ADDRESS
BSR CKWADR CHECK WORD BOUNDRY ADDRESS
MOVE.L D0,REGPC
SPC 1
GOCMD1A MOVE.L REGPC,D0 (ALSO SUBROUTINE ENTRY)
BSR PPHY PRINT ".PC" PHYSICAL ADDRESS
RTS
SPC 1
GCMD DS 0 "G" ALIAS FOR "GO"
GOCMD BSR GOSET1 "GO" (AFTER TRACING ONE INST)
GOCMD1 MOVE.L #-1,TRACECNT "FLAG" COUNTER AS SPECIAL
BRA UNTRACE
SPC 2
GDCMD BSR GOSET1 "GO DIRECT" Command
BRA UNSTACK
PAGE
* ***BR*** SET AND PRINT BREAKPOINTS
SPC 1
* DELETE ALL BREAKPOINTS
NOBRCMD BSR.S FIXBP GET POINTERS
BCMD01 CLR.L (A0)+ CLEAR THE ADDRESS TABLE
SUB.L #1,D7 DO IT 8 TIMES
BNE BCMD01 *
BRA.S BCMD7 DISPLAY EMPTY TABLE
SPC 1
FIXBP LEA BPADD,A0 SET UP ADDRESS & COUNTER
MOVE.L #8,D7 COUNTER
LEA BPCNT,A2 COUNTS
RTS
SPC 3
************************************************************
* THIS COMMAND SUPPORTS THE "NO" OPTION. COMMANDS THAT ALLOW
* THE "NO" OPTION PROVIDE A HARD BRANCH 4 BYTES BEFORE THE
* REGULAR COMMAND.
************************************************************
SPC 1
BRA.L NOBR0 ENTRY FOR "NOBR" (IT LOOKS FOR PARMS OR NOT)
BRCMD LEA BCMD7(PC),A0 WHERE TO GO IF NO PARMS
BCMD0 BSR FNEXTF FIND NEXT FIELD
BSR GETA GET ADDRESS
BSR CKWADR CHECK WORD BOUNDRY ADDRESS
SPC 1
BSR FIXBP SET UP COUNTER & ADDRESS
BCMD00 CMP.L (A0),D0 SEE IF ALREADY IN TABLE
BEQ.S BCMD33 GO CHECK FOR COUNT
ADD.L #4,A2 BUMP OTHER POINTER
ADD.L #4,A0 BUMP MAIN POINTER
SUB.L #1,D7
BNE BCMD00
SPC 1
BSR FIXBP GET ADDRESS & POINTERS
BCMD3 TST.L (A0) FIND AN EMPTY STOP
BNE.S BCMD5
MOVE.L D0,(A0) PUT NEW ADDRESS IN TABLE
BCMD33 CLR.L (A2) CLEAR CURRENT COUNT
MOVE.B (A5),D1 CHECK INPUT FOR COUNT
CMP.B #';',D1
BNE.S BCMD6 NO COUNT
ADD.L #1,A5 BUMP THE BUFFER SCANNER
BSR GETNUMA GO GET THE COUNT
MOVE.L D0,(A2) MOVE TO TABLE
SPC 1
BCMD6 LEA BCMD7(PC),A0 WHERE TO GO IF NO MORE PARAMETERS
BRA BCMD0
SPC 1
BCMD5 ADD.L #4,A0 BUMP TABLE POINTER
ADD.L #4,A2 BUMP POINTER TO COUNTS
SUB.L #1,D7 LOOP AROUND
BNE BCMD3
SPC 1
BCMD55 LEA MSG008E(PC),A5 TABLE FULL; ERROR MESSAGE
BSR FIXDATA
BRA.S BCMD77
SPC 1
BCMD7 LEA MSGBR(PC),A5 "BREAKPOINTS"
BSR FIXDCRLF
BCMD77 BSR OUT1CR
BSR FIXBP SET ADDRESS & COUNTER
BCMD8 MOVE.L (A2)+,D6 D6 = COUNT
MOVE.L (A0),D0 D0 = ADDRESS
BEQ.S BCMD9 ZERO ADDRESS
BSR FRELADDR FORMAT RELATIVE ADDRESS
MOVE.B #' ',(A6)+
SPC 1
MOVE.L (A0),D0 FORMAT ABSOLUTE ADDRESS
BSR PNT6HX
MOVE.L D6,D0
BEQ.S BCMD81 DONT PRINT ZERO COUNT
MOVE.B #';',(A6)+
BSR PNTZHX PRINT WITH ZERO SURPRESS
SPC 1
BCMD81 BSR OUT1CR
BCMD9 ADD.L #4,A0
SUB.L #1,D7 LOOP AROUND
BNE BCMD8
BRA MACSBUG
MSGBR DC.B 'BREAKPOINTS',EOT
SPC 4
* NOBR COMMAND
NOBR0 LEA NOBRCMD(PC),A0 WHERE TO GO IF NO PARAMETERS
NOBR1 BSR FNEXTF FIND NEXT FIELD
BSR GETA GO DECODE NUMBER/ADDRESS
TST.L D0
BEQ BCMD55 ZERO NOT VALID BREAKPOINT
BSR CKWADR CHECK WORD BOUNDRY ADDRESS
SPC 1
LEA BPADD,A0 SET UP TABLE POINTER
MOVE.L #8,D7 COUNTER
NOBR3 MOVE.L (A0),D1 GET BREAKPOINT IN TABLE
CMP.L D1,D0 SEE IF SAME
BEQ.S NOBR4
ADD.L #4,A0
SUB.L #1,D7
BNE NOBR3
NOBR4 CLR.L (A0) CLEAR THIS BREAKPOINT
LEA BCMD7(PC),A0 WHERE TO GO IF NO PARMATER
BRA NOBR1
SPC 3
END